/*
//
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright (c) 2002-2008 Intel Corporation. All Rights Reserved.
//
*/

#ifndef __AAC_DEC_INT_H__
#define __AAC_DEC_INT_H__

#include "ipps.h"
#include "aaccmn_const.h"
#include "audio_codec_params.h"
#include "mp4cmn_pce.h"
#include "aac_status.h"
#include "sbr_dec_struct.h"
#include "align.h"

#ifdef __cplusplus
extern "C" {
#endif

  struct _AACDec;
  typedef struct _AACDec AACDec;

  AACStatus aacidecReset(AACDec *state);
  AACStatus aacidecInit(AACDec *state_ptr);
  AACStatus aacidecUpdateStateMemMap(AACDec *state, Ipp32s mShift);
  AACStatus aacidecGetSize(Ipp32s *pSize);
  AACStatus aacidecGetFrame(Ipp8u  *inPointer,
                            Ipp32s *decodedBytes,
                            Ipp16s *outPointer,
                            Ipp32s inDataSize,
                            Ipp32s outBufferSize,
                            AACDec *state);
  AACStatus aacidecGetDuration(Ipp32f *p_duration,
                               AACDec *state);
  AACStatus aacidecGetInfo(cAudioCodecParams *a_info,
                           AACDec *state);

  AACStatus aacidecSetSamplingFrequency(Ipp32s sampling_frequency_index,
                                        AACDec *state);
  AACStatus aacidecSetSBRModeDecode(Ipp32s ModeDecodeHEAAC,
                                    AACDec *state);
  AACStatus aacidecSetSBRModeDwnmx(Ipp32s ModeDwnsmplHEAAC,
                                   AACDec *state);
  AACStatus aacidecSetSBRSupport(eSBR_SUPPORT flag, AACDec *state);
  AACStatus aacidecSetAudioObjectType(enum AudioObjectType audio_object_type,
                                      AACDec *state);
  AACStatus aacidecSetPCE(sProgram_config_element *pce,
                          AACDec *state);
  AACStatus aacidecSetAdtsChannelConfiguration(Ipp32s adts_channel_configuration,
                                               AACDec *state);
  AACStatus aacidecInitCRC(Ipp32s crc_enable,
                           AACDec *state);
  AACStatus aacidecSetCRC(Ipp32s crc,
                          AACDec *state);
  AACStatus aacidecGetSbrFlagPresent(Ipp32s *SbrFlagPresent,
                                     AACDec *state);
  AACStatus aacidecGetCRC(Ipp32s *crc,
                          AACDec *state);
  AACStatus aacidecGetFrameSize(Ipp32s *frameSize,
                                AACDec *state);
  AACStatus aacidecGetSampleFrequency(Ipp32s *freq,
                                      AACDec *state);

  AACStatus aacidecGetNumDecodedFrames(Ipp32s *num,
                                       AACDec *state);

  AACStatus aacidecGetChannels(Ipp32s *ch,
                               AACDec *state);

  AACStatus aacidec_GetID3Len(Ipp8u *in,
                              Ipp32s inDataSize,
                              AACDec *state);

  AACStatus aacidec_SkipID3(Ipp32s inDataSize,
                            Ipp32s *skipped,
                            AACDec *state);
#ifdef __cplusplus
}
#endif

#endif
